# 作者：一只牛吗
# 2025 年02月 10日 19时 30分 38秒
# 1278599690@qq.com
import os
'''
os.SEEK_SET：从文件开头开始移动
os.SEEK_CUR：从当前位置开始移动
os.SEEK_END：从文件末尾开始移动

'''


def seek_test():
    file = open("file.txt", "r+")
    file.seek(5, os.SEEK_SET)
    text = file.read(5)
    print(text)
    file.seek(0, os.SEEK_CUR) #
    text = file.read(3)
    print(text)
    # file.seek(0, os.SEEK_END)
    # file.read(5)
    file.close()


def seek_b_cur():
    '''
    在b模式下，读取到的是字节流，读取图片，音频，视频
    :return:
    '''
    file = open("file.txt", "rb+") # 二进制模式下不需要设置encoding
    file.seek(5, os.SEEK_CUR)
    file.seek(-2, os.SEEK_CUR)
    file.seek(-3, os.SEEK_END)
    text = file.read(5) # 输出的b'hello'，是字节流类型，也称之为bytes类型
    print(text)
    file.close()


def copy_file():
    '''
    复制文件
    :return:
    '''
    file1 = open("372355189760252144.jpg", "rb+")
    file2 = open("372355189760252144_copy.jpg", "wb+")
    b = file1.read(1024*1024)
    file2.write(b)
    file1.close()
    file2.close()


def modify_picture():
    '''
    修改图片文件
    :return:
    '''
    file = open("372355189760252144.jpg", "rb+")
    file.seek(10, os.SEEK_SET)
    b = file.read(1)
    inverted_b = bytes([~b[0] & 0xFF])
    print(f'取反字节{inverted_b}')
    file.seek(10, os.SEEK_SET)
    # 写回取反后的字节
    file.write(inverted_b)
    file.close()


def restore_picture():
    '''
    还原修改后的图片文件
    :return:
    '''
    file = open("372355189760252144.jpg", mode="rb+")  # 以读写模式打开文件
    file.seek(1024*1024, os.SEEK_SET)  # 定位到第10个字节

    # 先读取原始内容
    original_data = file.read(1)  # 读取被覆盖的5个字节（hello）

    # 取反字节
    inverted_b = bytes([~original_data[0] & 0xFF])

    # 返回原内容（还原修改）
    file.seek(10, os.SEEK_SET)  # 定位回第10个字节
    file.write(original_data)  # 写回原始数据
    print(f'原字节：{original_data}')

    file.close()  # 关闭文件

if __name__ == '__main__':
    # seek_test()
    # seek_b_cur()
    # copy_file()
    modify_picture()
    # restore_picture()